package cn.ml.duoXianCheng.demos;


/**
 * 两条线程一次输出1-100
 * 获取线程名称：Thread.currentThread().getName()
 */
public class jiaoTiPrint100 {

    public static void main(String[] args) {
        NumMode numMode = new NumMode();

        Thread t1 = new Thread(new JiNum(numMode));//奇数线程启动
        Thread t2 = new Thread(new OuNum(numMode));//偶数线程启动
        t1.start();
        t2.start();
    }

    // 打印奇数
    //static class JiNum implements Runnable{
    static class JiNum extends Thread {

        private NumMode numMode;
        public JiNum(NumMode numMode){
            this.numMode = numMode;
        }

        @Override
        public void run() {
            while (true){
                synchronized (numMode){
                    if (numMode.num < 100){
                        if (numMode.num %2 != 0){
                            //奇数
                            System.out.println(Thread.currentThread().getName()+"-奇数==>"+numMode.num);
                            numMode.num++;
                            numMode.notify();
                        }else {
                            //偶数 奇数线程等待
                            try {
                                numMode.wait();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }else {
                        break;
                    }
                }

            }
        }
    }
    //打印偶数
    //static class OuNum implements Runnable{
    static class OuNum extends Thread{
        private NumMode numMode;
        public OuNum(NumMode numMode){
            this.numMode = numMode;
        }
        @Override
        public void run() {
            while (true){
                synchronized (numMode){
                    if (numMode.num < 100){
                        if (numMode.num %2 == 0){
                            //偶数
                            System.out.println(Thread.currentThread().getName()+"-偶数==>"+numMode.num);
                            numMode.num++;
                            numMode.notify();
                        }else {
                            //奇数 偶数线程等待
                            try {
                                numMode.wait();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }else {
                        break;
                    }
                }

            }
        }
    }
    // 共享资源 都要访问的数字
    static class NumMode {
        int num = 1;
    }

}
